package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

import java.util.Arrays;

/**
 * 计算状态枚举
 *
 * 用于标识批阅统计数据的计算状态，支持完整的计算生命周期管理
 *
 * @author System
 * @version 1.0.0
 */
public enum CalculationStatus implements BaseEnum {

    /**
     * 待计算 - 计算任务已创建但尚未开始执行
     */
    PENDING("PENDING", "待计算", "计算任务已创建，排队等待系统资源分配和执行"),

    /**
     * 计算中 - 计算任务正在执行中
     */
    CALCULATING("CALCULATING", "计算中", "计算任务正在执行，系统正在处理统计数据计算"),

    /**
     * 已完成 - 计算任务已成功完成
     */
    COMPLETED("COMPLETED", "已完成", "计算任务已成功完成，统计结果已生成并可用"),

    /**
     * 失败 - 计算任务执行失败
     */
    FAILED("FAILED", "失败", "计算任务执行失败，需要检查错误原因并重新执行"),

    /**
     * 已取消 - 计算任务被用户或系统取消
     */
    CANCELLED("CANCELLED", "已取消", "计算任务被用户或系统主动取消，不再执行");

    private final String code;
    private final String description;
    private final String detail;

    CalculationStatus(String code, String description, String detail) {
        this.code = code;
        this.description = description;
        this.detail = detail;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 获取详细说明
     */
    public String getDetail() {
        return detail;
    }

    /**
     * 根据编码获取枚举
     */
    public static CalculationStatus fromCode(String code) {
        return Arrays.stream(values())
                .filter(e -> e.code.equals(code))
                .findFirst()
                .orElse(null);
    }

    /**
     * 根据描述获取枚举
     */

    @Override
    public String toString() {
        return description;
    }
}